package com.ddwl.schema.vo.base;

import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;

/**
 * @author Fu Zhaohui
 */
@Setter
@Getter
public class RestVo<T> {

    private int code = 200;
    private boolean success = true;
    private String msg;

    @ApiModelProperty("返回结果")
    private T result;

    private RestVo() {
    }

    private RestVo(T result) {
        this.result = result;
    }

    private RestVo(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
        this.success = false;
    }

    public static <T> RestVo<T> ok(T t) {
        return new RestVo<>(t);
    }

    public static <T> RestVo<T> ok() {
        return new RestVo<>();
    }

    public static <T> RestVo<T> error(Integer code, String msg) {
        return new RestVo<>(code, msg);
    }

    public static <T> RestVo<T> forbid(String msg) {
        return new RestVo<>(401, msg);
    }

    public static <T> RestVo<T> valid(String msg) {
        return new RestVo<>(400, msg);
    }

    public static <T> RestVo<T> error(String msg) {
        return new RestVo<>(500, msg);
    }

    public static <T> RestVo<T> payFail(String msg) {
        return new RestVo<>(505, msg);
    }

    public static <T> RestVo<T> notFound(String msg) {
        return new RestVo<>(404, msg);
    }
}
